home *** CD-ROM | disk | FTP | other *** search
/ Tiger Disk 6 / Tiger_Disk_006_19xx_Tiger-Crew-Disk_de_Side_B.d64 / 1 mk (.txt) next >
Commodore BASIC  |  2023-02-26  |  7KB  |  159 lines

  1. 8 u$="[197][197][197][197][197][197][197][197][197]":v$="[164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164]"
  2. 9 a$="[176][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][174]":b$="               ":c$="[173][192][177][192][177][192][177][192][177][192][177][192][177][192][177][192][189]"
  3. 10 print"[147][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164]"
  4. 20 print"syntax-lehrgang 'maschinensprache' (1)"
  5. 30 print"die idee  zu diesem lehrgang  wurde von"
  6. 40 print"einigen unserer abonnenten  vergangenen"
  7. 50 print"herbst auf der hobbytronic in stuttgart"
  8. 60 print"angeregt.   die wenig spaeter  waehrend"
  9. 70 print"eines wochenendseminars ueber 'die pro-"
  10. 80 print"graammierung der  6502-cpu'  gewonnenen"
  11. 90 print"erfahrungen fuehrten zu diesem lehrgang"
  12. 100 print"wesentliche  vorkenntnisse  sind  nicht"
  13. 110 print"erforderlich."
  14. 120 i=1:gosub5000:ifflthen10
  15. 300 print"[147][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164]":print"1. die 6502-cpu":print"[164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164]
  16. 310 [153]"1.1. die hardwarewait (die innere struktur)"
  17. 320 [153]"die 6502-cpu hat eine busstruktur. alle"
  18. 330 [153]"internen einheiten sind durch einen bus"
  19. 340 [153]"verbunden. unter einem bus versteht man
  20. 350 print"eine mehrdraehtige  parallel-verbindung
  21. 360 [153]"zwischen allen teilsystemen der cpu.
  22. 370 print"innerhalb der cpu gibt es zwei wichtige
  23. 380 [153]"busse:     den datenbus   und":[153][163]15)u$
  24. 390 [153]"           den adressbus":[153][163]15)u$
  25. 400 i[178]2:[141]5000:[139]fl[167]10
  26. 500 [153]"loadder datenbus   uebertraegt":[153][163]4)u$
  27. 510 [153]"      1. daten  und
  28. 520 print"      2. codierte befehle
  29. 530 [153]"innerhalb der cpu, und zwischen cpu und
  30. 540 print"an die cpu  angeschlossenen  einheiten,
  31. 550 [153]"z.b. den externen speichern ('rams').
  32. 560 print"der datenbus hat eine breite von 8 bit.
  33. 570 [153]"8 bit nennt man ein 'wort' oder 'byte'."
  34. 580 [153]"ganz entsprechend spricht man von einem
  35. 585 print"'datenwort' oder einem 'befehlswort'.
  36. 590 [153]"daher gehoert die 6502-cpu  zur familie
  37. 600 print"der 8-bit-prozessoren.
  38. 610 i[178]3:[141]5000:[139]fl[167]300
  39. 700 [153]"loadob ein am datenbus anliegendes byte ein
  40. 710 print"daten- oder bebehlsbyte ist,  weiss die
  41. 720 [153]"cpu nicht a priori.   vielmehr muss der
  42. 730 print"programmierer sein programm derart auf-
  43. 740 [153]"bauen, dass fehlinterpretationen ausge-
  44. 750 print"schlossen sind. derartige fehlinterpre-
  45. 760 [153]"tationen enden i.a. in unkontrollierten
  46. 770 print"programmablaeufen (der rechner 'springt
  47. 780 [153]"in die wueste'..)
  48. 790 print"sie sind daher peinlich zu vermeiden.
  49. 810 i[178]4:[141]5000:[139]fl[167]500
  50. 900 [153]"loadder adressbus:":[153][163]4)u$
  51. 910 [153]"wenn  die cpu  ueber denclose datenbus  ein
  52. 920 print"einzelnes  byte aus  einem der externen
  53. 930 [153]"speicher ('rams')  uebertragen soll, so
  54. 940 print"muss die cpu genau angeben, aus welchem
  55. 950 [153]"der sehr vielen speicherplaetze  dieses
  56. 960 print"byte gelesen werden soll. dazu legt sie
  57. 970 [153]"die adresse  des gewuenschten speicher-
  58. 980 print"platzes an den adressbus.   die externe
  59. 990 [153]"speichereinheit weiss dann, welcher der
  60. 1000 print"vielen speicherplaetze gemeint ist.
  61. 1010 i[178]5:[141]5000:[139]fl[167]700
  62. 1100 [153]"loadder adressbus umfasst 16 bit, also zwei
  63. 1110 print"byte. damit ist er doppelt so breit wie
  64. 1120 [153]"der datenbus.  mit 16 bit  kann die cpu
  65. 1130 print"65536 verschiedene adressen  anwaehlen.
  66. 1140 [153]"fuer das erlernen des programmierens in
  67. 1150 print"maschinensprache   sind   weitergehende
  68. 1160 [153]"kenntnisse der hardware nicht noetig.
  69. 1180 print"wichtiger ist es,  die softwarestruktur
  70. 1190 [153]"der cpu (naechstes kapitel) zu kennen.
  71. 1210 i=6:gosub5000:ifflthen900
  72. 1300 print"[147]"left$(v$,17):print"1.2. die software
  73. 1305 [153][200](v$,28):[153]"1.2.1. ein programmiermodell
  74. 1310 print"fuer den programmierer  ist wesentlich,
  75. 1320 [153]"die funktion  der internen register der
  76. 1330 print"cpu zu verstehen. die cpu besitzt 6 in-
  77. 1340 [153]"terne register.   sie duerfen nicht mit":[153][163]18)u$;u$"valvalval
  78. 1350 print"externen speichern verwechselt werden!":printu$;u$;u$;u$;"[197][197]
  79. 1360 [153]"die naechste  seite  zeigt closeschematisch
  80. 1380 print"die 6 register. sie werden auf den fol-
  81. 1390 [153]"genden seiten im einzelnen vorgestellt.
  82. 1410 i=7:gosub5000:ifflthen1100
  83. 1500 l=16:print"[147]cpu  6502":printu$:print"(schema)";
  84. 1520 fori=0to5:gosub5100:next
  85. 1530 print""tab(35)"ac[157][157]xr[157][157]yr
  86. 1540 [153]a$"cmd=":[153]"(NULL)"[163]35)"pc":[153]c$"cmd>"
  87. 1550 [153][163]13)"ortantan=":[153][163]13)"(NULL)01"[163]35)"sp":[153][163]13)"/tantan>
  88. 1560 s$="nvbdizcsr":printtab(17)s$
  89. 1570 print"[161]ac: accumulator[160] [161]pc: program counter
  90. 1580 [153]"getxr: x-register close getsp: stack-pointer
  91. 1590 print"[161]yr: y-register   [161]sr: status-register
  92. 1610 i[178]8:[141]5000:[139]fl[167]1300
  93. 1700 [153]"loadder  accumulator :":[153]u$;u$
  94. 1710 l[178]8:[141]5100:[153][163]26)"ononac
  95. 1720 print"der ac ist ein  8-bit-register.  er ist
  96. 1730 [153]"das haupt-rechen-register der cpu.":[153][163]4)u$;u$"valvalval
  97. 1740 print"im ac  erscheinen die ergebnisse arith-
  98. 1750 [153]"metischer oder logischer operationen.
  99. 1760 print"bei  datentransfers  zwischen  externen
  100. 1770 [153]"speicherzellen  benutzt man i.a. den ac
  101. 1780 print"als zwischenspeicher.
  102. 1810 i[178]9:[141]5000:[139]fl[167]1500
  103. 1900 [153]"loadbeispiel: es soll der inhalt  der spei-":[153]u$
  104. 1910 [153]"cherzelle 0  in speicherzelle 1  ueber-
  105. 1920 print"tragen werden. (datentransfer)
  106. 1930 [153]"loesung : die cpu kennt  keinen befehl,":[153]u$
  107. 1940 [153]"der den inhalt eines speichers in einen
  108. 1950 print"anderen kopiert.    aber sie kennt zwei
  109. 1960 [153]"andere befehle: close1. lade den inhalt ei-
  110. 1970 print"nes bestimmten speichers in den ac, und
  111. 1980 [153]"2. speichere den ac-inhalt in einem be-
  112. 1990 print"stimmten  speicher ab. es geht also nur
  113. 2000 [153]"mit dem ac als zwischenspeicher.
  114. 2010 i=10:gosub5000:ifflthen1700
  115. 2100 print"[147]x-register und y-register :":printu$;u$;u$
  116. 2110 gosub5100:printtab(26)"[145][145]xr,yr
  117. 2120 [153]"xr und yr werden - wie der ac - oft als
  118. 2130 print"zwischenspeicher verwendet. sie koennen
  119. 2140 [153]"einige arithmetische operationen durch-
  120. 2150 print"fuehren. ihre wichtigste anwendung fin-
  121. 2160 [153]"den sie aber bei indirekten und bei in-
  122. 2170 print"dizierten  adressierungen.  daher nennt
  123. 2180 [153]"man  xr und  yr auch indexregister. wir":[153][163]21)u$"valvalvalval
  124. 2190 print"kommen darauf spaeter noch ausfuehrlich
  125. 2200 [153]"zurueck.
  126. 2210 i=11:gosub5000:ifflthen1900
  127. 2300 print"[147]beispiele:":printu$
  128. 2310 print"1. zum datentransfer (letztes beispiel)
  129. 2320 [153]"kann man auch das xr oder yr verwenden.
  130. 2330 print"2. die in 'basic' so wichtige schleife:
  131. 2340 [153]"fori=..to..:next laesst sich in maschi-
  132. 2350 print"nensprache  leicht mit einem der index-
  133. 2360 [153]"register durchfuehren.
  134. 2370 print"3. die  behandlung  von dimensionierten
  135. 2380 [153]"variablen (basic: a$(i), nr(j)) gelingt
  136. 2390 print"mit den indexregistern  recht einfach.
  137. 2410 i[178]12:[141]5000:[139]fl[167]2100
  138. 2500 [153]"loadtotototototototo":[153]"aufgabenwait:
  139. 2510 print"1. machen sie sich den unterschied klar
  140. 2520 [153]"zwischen einem internen   und einem ex-
  141. 2530 print"ternen speicher. (sehr wichtig!)
  142. 2540 [153]"2. wie kann man einen datentransfer mit
  143. 2550 print"xr (yr) von speicher 0 nach 1 machen ?
  144. 2560 [153]"3. wie koennte man einen datenaustausch":[153][163]30)u$
  145. 2580 [153]"zwischen zwei speichern  durchfuehren ?
  146. 2590 print"(hinweis: sie muessen zweimal zwischen-
  147. 2600 [153]"speichern!)
  148. 2610 print"  - seite 13 -  <+> [145][164][164][164][164][157][157][157][157]ende[146]  <-> von vorne";
  149. 2620 gosub5020:onflgoto10:print"[147]":end:run
  150. 4999 end
  151. 5000 rem umblaettern
  152. 5010 print"  - seite";i;"-  <+> weiter  <-> zurueck";
  153. 5020 fori=0to11:getx$:next
  154. 5030 getx$:ifx$=""then5030
  155. 5040 ifx$="+"thenfl=0:return
  156. 5050 ifx$="-"thenfl=1:return
  157. 5060 goto5030
  158. 5100 printtab(l)a$:printtab(l)"[221]";b$;"[221]":printtab(l)c$:return
  159.